// 计算向量叉乘
function crossMul( v1, v2 ) {
    return v1[0] * v2[1] - v1[1] * v2[0];
}

// 判断两条直线是否相交
function ifCrossed( p1, p2, p3, p4 ) {
    var v1 = [p1[0] - p3[0], p1[1] - p3[1]], v2 = [p2[0] - p3[0], p2[1] - p3[1]], v3 = [p4[0] - p3[0], p4[1] - p3[1]]
    var v = crossMul(v1, v3) * crossMul(v2, v3);
        v1 = [p3[0] - p1[0], p3[1] - p1[1]]
        v2 = [p4[0] - p1[0], p4[1] - p1[1]]
        v3 = [p2[0] - p1[0], p2[1] - p1[1]]
    return (v <= 0 && crossMul(v1, v3) * crossMul(v2, v3) <= 0) ? true : false;
}

// 判断点是否在多边形内部
function innerOrOuter( pt1, ptsArray ) {
    var count = 0
    pt2 = [1000000000000, 0]
    for( let i = 0; i<ptsArray.length - 1; i++ ){
        pt3 = ptsArray[i]
        pt4 = ptsArray[i + 1]
        if ( ifCrossed( pt1, pt2, pt3, pt4 ) ) {
            count += 1
        }
    }
    return (count % 2 == 0) ? false : true;
}